অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ) একটি শক্তিশালী মেসেজ ব্রোকার যা মেসেজিং সিস্টেমের মধ্যে উচ্চ কার্যকারিতা এবং ফ্লেক্সিবিলিটি প্রদান করে। মেসেজগুলির জন্য Priority (প্রায়োরিটি) এবং Expiration (এক্সপিরেশন) ব্যবহার করে, আপনি মেসেজ প্রেরণ এবং গ্রহণের প্রক্রিয়াকে আরও নির্ভুল এবং কার্যকরী করতে পারেন। এই দুটি বৈশিষ্ট্য মেসেজ হ্যান্ডলিং সিস্টেমে গুরুত্বপূর্ণ ভূমিকা পালন করে, বিশেষ করে যখন আপনাকে মেসেজের গুরুত্ব বা মেয়াদ নির্ধারণ করতে হয়।
Priority মেসেজ হ্যান্ডলিং ব্যবস্থায় মেসেজের গুরুত্ব বা অগ্রাধিকার নির্ধারণ করে। অ্যাপাচি অ্যাকটিভএমকিউতে মেসেজের জন্য Priority ব্যবহার করলে, আপনি মেসেজগুলির প্রক্রিয়াকরণে অগ্রাধিকার দিতে পারবেন। মেসেজের প্রাথমিক উদ্দেশ্য হল, যদি কোনো কিউতে একাধিক মেসেজ থাকে, তবে উচ্চ_PRIORITY মেসেজগুলি প্রথমে প্রক্রিয়া করা হবে।
অ্যাপাচি অ্যাকটিভএমকিউতে প্রতিটি মেসেজের একটি priority (0 থেকে 9 এর মধ্যে) থাকে:
যখন একটি মেসেজ কিউতে জমা হয়, তখন এটি কিউতে অন্যান্য মেসেজের তুলনায় বেশি_PRIORITY মেসেজ হিসেবে এগিয়ে যাবে, এবং আগে প্রক্রিয়া করা হবে। এটি গুরুত্বপূর্ণ যখন আপনি কিছু মেসেজকে দ্রুত প্রক্রিয়া করতে চান, যেমন জরুরি বা অগ্রাধিকারের কাজ।
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
public class PriorityMessageProducer {
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("PriorityQueue");
MessageProducer producer = session.createProducer(destination);
// Set Priority (higher value means higher priority)
producer.setPriority(9); // Highest priority
TextMessage message = session.createTextMessage("This is a high priority message");
producer.send(message);
System.out.println("Message sent with priority: " + message.getJMSPriority());
connection.close();
}
}
এখানে, setPriority(9) ব্যবহার করে মেসেজের উচ্চ_PRIORITY (9) সেট করা হয়েছে। এর ফলে, এই মেসেজটি অন্যান্য মেসেজগুলোর তুলনায় আগে প্রক্রিয়া হবে।
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
public class PriorityMessageConsumer {
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("PriorityQueue");
MessageConsumer consumer = session.createConsumer(destination);
Message message = consumer.receive();
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
System.out.println("Received message with priority: " + textMessage.getJMSPriority());
System.out.println("Message: " + textMessage.getText());
}
connection.close();
}
}
এই কোডে কনজিউমার কিউ থেকে মেসেজ গ্রহণ করে এবং মেসেজের priority বের করে।
Expiration মেসেজের মেয়াদ বা মেয়াদ শেষ হওয়া নির্ধারণ করে। এটি মেসেজের জন্য একটি নির্দিষ্ট সময়কাল নির্ধারণ করতে সহায়তা করে, যার পরে মেসেজটি কিউ থেকে মুছে যাবে বা অপ্রচলিত হয়ে যাবে। যদি একটি মেসেজের মেয়াদ শেষ হয়ে যায়, তবে সেটি কনজিউমারের কাছে পৌঁছানোর আগে কিউ থেকে সরিয়ে ফেলা হবে।
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
public class ExpirationMessageProducer {
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("ExpirationQueue");
MessageProducer producer = session.createProducer(destination);
// Set expiration time (milliseconds)
long expirationTime = 5000; // 5 seconds
TextMessage message = session.createTextMessage("This message will expire in 5 seconds");
producer.setTimeToLive(expirationTime);
producer.send(message);
System.out.println("Message sent with expiration time: " + expirationTime);
connection.close();
}
}
এখানে, setTimeToLive(5000) ব্যবহার করে মেসেজের জন্য 5 সেকেন্ডের এক্সপিরেশন সময় সেট করা হয়েছে। এর মানে হলো, ৫ সেকেন্ডের মধ্যে মেসেজ কনজিউমারের কাছে পৌঁছানোর জন্য প্রক্রিয়াকরণ না হলে, এটি কিউ থেকে সরিয়ে ফেলা হবে।
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
public class ExpirationMessageConsumer {
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("ExpirationQueue");
MessageConsumer consumer = session.createConsumer(destination);
// Receiving expired message (if any)
Message message = consumer.receive(6000); // wait for 6 seconds
if (message == null) {
System.out.println("No message received or message expired.");
} else if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
System.out.println("Received message: " + textMessage.getText());
}
connection.close();
}
}
এই কোডে, কনজিউমার ৬ সেকেন্ড অপেক্ষা করে এবং যদি মেসেজ এক্সপায়ার্ড না হয়, তবে সেটি গ্রহণ করা হয়।
বৈশিষ্ট্য | Priority (প্রায়োরিটি) | Expiration (এক্সপিরেশন) |
---|---|---|
ফাংশন | মেসেজের অগ্রাধিকার বা গুরুত্ব নির্ধারণ | মেসেজের মেয়াদ নির্ধারণ, মেয়াদ শেষ হলে মেসেজ মুছে ফেলা |
ব্যবহার | জরুরি বা গুরুত্বপূর্ণ মেসেজ আগে প্রক্রিয়া করতে ব্যবহৃত | মেসেজ কিউ থেকে অপসারণের জন্য নির্দিষ্ট সময় পর মেসেজ এক্সপায়ার করা |
মান | 0 থেকে 9 (9 সবচেয়ে বেশি) | মিলিসেকেন্ডে সময় নির্ধারণ |
কিউ প্রক্রিয়া | সর্বোচ্চ_PRIORITY মেসেজ প্রথমে প্রক্রিয়া হয় | এক্সপায়ার হওয়ার পরে মেসেজ কিউ থেকে সরিয়ে ফেলা হয় |
অ্যাপাচি অ্যাকটিভএমকিউ Priority এবং Expiration ব্যবহার করে মেসেজ হ্যান্ডলিং-এর কার্যক্ষমতা বাড়ানো যায়। Priority ব্যবহার করে মেসেজগুলির গুরুত্ব নির্ধারণ করা যায়, যেখানে উচ্চ_PRIORITY মেসেজগুলি আগে প্রক্রিয়া করা হয়। Expiration ব্যবহার করে, মেসেজের মেয়াদ নির্ধারণ করা হয়, এবং এক্সপায়ার হওয়ার পর মেসেজ কিউ থেকে সরিয়ে ফেলা হয়। এই দুটি বৈশিষ্ট্য মেসেজ প্রক্রিয়াকরণে আরও নিয়ন্ত্রণ এবং কার্যক্ষমতা নিয়ে আসে।
common.read_more